package com.ccnu.JobHub.common.util;

import io.jsonwebtoken.*;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class Token {
    /**
     * 密钥
     */
    private static final String secretKey = "my-job-hub";

    /**
     * 过期间隔（分钟）
     * 当前为 10天后过期
     */
    private static final int expirationInterval = 10 * 24 * 60 * 60;

    /**
     * 获得一个新的 token
     *
     * @param id studentId或者managerId
     * @param temp 是否是临时token true代表是 false 代表否
     * @return 返回一个签名jwt
     */
    public static String generateNewToken(String id, Boolean temp) {

        // 构建payload
        Map<String, Object> claims = new HashMap<>();
        claims.put("studentId", id);
        claims.put("temp",temp);

        // 创建并签名 jwt
        return Jwts.builder()
                .setClaims(claims)
                .setExpiration(new Date(System.currentTimeMillis() + expirationInterval * 1000))
                .setIssuedAt(new Date(System.currentTimeMillis()))
                .signWith(SignatureAlgorithm.HS256, secretKey.getBytes())
                .compact();
    }

    /**
     *
     * @param oldToken 判断这个token是否合法或者过期 如果temp为true代表是临时token不能进行除了验证验证码之外的操作
     * @return 返回结果false或者true
     */
    public static String inspectOldToken(String oldToken) {
        try {
            Claims claims = Jwts.parser()
                    .setSigningKey(secretKey.getBytes())
                    .parseClaimsJws(oldToken)
                    .getBody();
            if (!(boolean)claims.get("temp")){
                return (String) claims.get("studentId");
            }
            else return "temp";

        } catch (ExpiredJwtException | UnsupportedJwtException | MalformedJwtException | SignatureException | IllegalArgumentException e) {
            return "false";
        }
    }

}
